# -*- coding: utf-8 -*-
# @Time    : 2019/6/3 16:04
# @Author  : Igor
# @File    : Day10.py
# @Software: PyCharm

# 1.什么是继承，有何作用
"""可以直接使用基类中的方法，减少代码量，增加代码的重用度"""

# 2.编写三个类，person,teacher,student,teacher和student需要继承person,student需要重写person中的makeMoney方法，teacher
# 需要拓展一个自己的方法teach

#
# class Person(object):
#
#     def __init__(self, name, age, sex):
#         self.name = name
#         self.age = age
#         self.sex = sex
#
#     def showInfo(self):
#         print("我的名字叫:{},我的年龄:{}岁,我的性别是{}".format(self.name, self.age, self.sex))
#
#     def eat(self):
#         print("{}正在吃饭...".format(self.name))
#
#     def makeMoney(self):
#         print("{}，每小时赚100元".format(self.name))
#
#     def teach(self):
#         print("{}，每天教育自己的娃1次".format(self.name))
#
#
# class Teacher(Person):
#
#     def teach(self):
#         print("{}，每天教育学生1次".format(self.name))
#
#
# class Student(Person):
#
#     def makeMoney(self):
#         print("{}，每小时赚1000元".format(self.name))
#
#
# s = Student("小明同学", 18, "男")
# s.makeMoney()
# t = Teacher("小李老师", 38, "男")
# t.teach()

# 3.在上面的例子中另外在创建一个类ClassRoom,ClassRoom中有成员teacher和student对象,还有teach方法


# class Person(object):
#
#     def __init__(self, name, age, sex):
#         self.name = name
#         self.age = age
#         self.sex = sex
#
#     def showInfo(self):
#         print("我的名字叫:{},我的年龄:{}岁,我的性别是{}".format(self.name, self.age, self.sex))
#
#     def eat(self):
#         print("{}正在吃饭...".format(self.name))
#
#     def makeMoney(self):
#         print("{}，每小时赚100元".format(self.name))
#
#     def teach(self):
#         print("{}，每天教育自己的娃1次".format(self.name))
#
#
# class Teacher(Person):
#
#     def teach(self):
#         print("{}，每天教育学生1次".format(self.name))
#
#
# class Student(Person):
#
#     def makeMoney(self):
#         print("{}，每小时赚1000元".format(self.name))
#
# class ClassRoom(object):
#
#     def show(self):
#         s = Student("小明同学", 18, "男")
#         s.makeMoney()
#         t = Teacher("小李老师", 38, "男")
#         t.teach()
#
#
# c = ClassRoom()
# c.show()



# 4.描述对于多态的理解，列举三个展现了多态的方法
"""不同的子类对象 调用相同的父类方法，产生不同的执行结果"""


# 5.编写一个抽象类Animal,再设计Bird,Tiger类去实现抽象类中的方法并调用
import abc

class Animal(metaclass = abc.ABCMeta):

    @abc.abstractmethod
    def eat(self, food):
        pass


class Bird(Animal):

    def eat(self, food):
        print("鸟在吃{}...".format(food))


class Tiger(Animal):

    def eat(self, food):
        print("虎子在吃{}...".format(food))

bird = Bird()
bird.eat("虫子")
tiger = Tiger()
tiger.eat("猪")
"""在基类中定义了抽象方法,子类中只能执行eat方法，执行其他方法都会报错
"""